/*
 * ==================================================
 * 项目开发者：JerryStark
 * 开发者Email：4771007@qq.com
 * 开发者QQ:4771007
 * 开发范围：web，wap，android,ios,osx or win or linux 应用
 * ==================================================
 */
package RTGame.Server;

import RTGame.Configs.Load;
import RTPower.RTSocket;
import java.io.OutputStream;

/**
 * 端口监听的管理类
 * <br>提供启动,关闭
 * <br>使用一个独立的线程来监听
 *
 * @author jerry
 */
public class Manage {

    /**
     * 监听的主线程
     */
    public Thread ServerThread;

    /**
     * 监听实例
     */
    public RTSocket rtSocket;

    /**
     * 初始化准备线程
     */
    public Manage() {
        PlanOneThread();
    }

    /**
     * 启动服务
     */
    public void Start() {
        ServerThread.start();
    }

    /**
     * 停止服务
     */
    public void Stop() {
        rtSocket.StopServer();
        ServerThread = null;
    }

    /**
     * 重启服务
     */
    public void REStart() {
        Stop();
        Start();
    }

    /**
     * 准备一个线程给监听服务
     */
    private void PlanOneThread() {
        ServerThread = new Thread(() -> {
            SocketReady();
        });
    }

    /**
     * 打开端口监听
     * <br>方法内部已经开启了新的线程
     */
    private void SocketReady() {
        rtSocket = new RTSocket() {
            @Override
            public String ServerBackMsg(String client_ip,OutputStream writer, StringBuilder inputstring) {
                //获得端口监听得到的客户端请求数据,
                //这里准备要返回的字符串

                WriteBack write_back = new WriteBack(client_ip,inputstring);
                String back_string = write_back.BackMsg();
                return back_string;
            }
        };

        //配置服务监听端口
        rtSocket.ServerPort = Load.MainConfig.get("ServerPort").getAsInt();
        rtSocket.StartServer();
    }
}
